The present invention pertains generally to data integrity in data recording/recovery devices, and more particularly to a method for detecting and correcting falsely detected xe2x80x9cgoodxe2x80x9d data packets recovered from a storage medium.
The present invention is related to co-pending U.S. patent application entitled xe2x80x9cMethod And Apparatus For Logically Rejecting Previously Recorded Track Residue From Magnetic Mediaxe2x80x9d, invented by McAuliffe et al., and having an internal docket number of 9086/103 and a Ser. No. of 09/192,794, filed concurrently herewith on Nov. 16, 1998, and co-pending U.S. patent application entitled xe2x80x9cA Method Of Reacquiring Clock Synchronization On A Non-Tracking Helical Scan Tape Devicexe2x80x9d, invented by Blatchley et al., and having an internal docket number of 9086/108 and a Ser. No. of 09/192,808, filed concurrently herewith on Nov. 16, 1998, and co-pending U.S. patent application entitled xe2x80x9cMethod And System For Monitoring And Adjusting Tape Position Using Control Data Packetsxe2x80x9d, invented by McAuliffe et al., and having an internal docket number of 9086/107 and a Ser. No. of 09/193,030, filed concurrently herewith on Nov. 16, 1998, and co-pending U.S. patent application entitled xe2x80x9cVariable Speed Recording Method and Apparatus for a Magnetic Tape Drivexe2x80x9d, invented by Beavers et al., and having an internal docket number of 9086/101 and a Ser. No. of 09/176,079, filed on Oct. 20, 1998, and co-pending U.S. patent application entitled xe2x80x9cOverscan Helical Scan Head for Non-Tracking Tap Subsystems Reading at up to 1xc3x97 Speed and Method for Simulation of Samexe2x80x9d, invented by Blatchley et al., and having an internal docket number of 9086/104 and a Ser. No. of 09/176,013, filed on Oct. 20, 1998, and co-pending U.S. patent application entitled xe2x80x9cFine Granularity Rewrite Method and Apparatus for Data Storage Devicexe2x80x9d, invented by Zaczek, and having an internal docket number of 9086/106 and a Ser. No. of 09/176,015, filed on Oct. 20, 1998, and co-pending U.S. patent application entitled xe2x80x9cMulti-level Error Detection and Correction Technique for Data Storage Recording Devicexe2x80x9d, invented by McAuliffe et al., and having an internal docket number of 9086/102 and a Ser. No. of 09/176,014, filed on Oct. 20, 1998, all of which are commonly owned and all of which are hereby incorporated by reference.
Data storage devices, which are used in both short- and long-term capacities, are an integral part of modern computer systems. While factors such as costs, device form factor, storage media size and capacity, and recording and recovery times are of high importance, of primary concern is the ability to maintain data integrity.
Techniques have been developed to detect data errors. One commonly used error detection technique is known as a polynomial or cyclical redundancy check (CRC). CRC generators are preloaded with a generating polynomial G(x) and treat data blocks as a polynomial D(x). The data polynomial D(x) is divided by the generating polynomial G(x) to obtain a quotient Q(x) and remainder R(x), such that D(x)/G(x)=Q(x)+R(x), where R(x) is known as the cyclic redundancy check (CRC). CRCs are generated over the data and recorded along with the data to the storage media. During the recovery of the data from the storage media during a later session, the CRC is regenerated from the recovered data and compared to the recorded CRC accompanying the data to determine whether or not the data contains an error. CRCs are useful in detection of a high percentage of data errors; however, because binary division is based on performing a logical exclusive OR (XOR) of a series of bits, and therefore the right combination of position and number of errors could result in the same CRC value as that of the correct value of a data packet, CRC checks cannot guarantee accuracy. Accordingly, occasionally a packet containing an error is falsely accepted as a good packet because the error is undetectable by the CRC generator using the particular predefined generating polynomial. This falsely detected xe2x80x9cgoodxe2x80x9d packet is herein termed a xe2x80x9croguexe2x80x9d packet.
Accordingly, in order to ensure data integrity, a need exists for a method of detecting and correcting rogue packets in data recovery systems.
The present invention is a novel method for detecting rogue packets in a data buffer. In accordance with the invention, a segment-level CRC is generated across the data and during the recording session by a segment CRC generator and recorded along with the data to the storage medium.
During a data recovery session, only those packets which pass a packet-level error detection test are allowed into the data buffer. When a buffer segment is filled with so-called xe2x80x9cgoodxe2x80x9d packets, and the segment-level CRC associated with the segment is recovered from the storage medium, a segment-level error detection test is performed across the segment-level CRC and the contents of the buffer segment. The segment-level error detection test will detect an error if the segment contains a rogue packet.
If the segment contains a rogue packet, a Reed-Solomon syndrome pair is calculated across each row in the buffer segment. If both syndromes are zero, the row does not contain a rogue packet. If both syndromes are not zero, the syndrome pair is used to calculate the location of a potential rogue packet. Once the location of all the potential rogue packets are determined, the potential rogue packets are effectively erased and error correction is performed on the segment to attempt to correct the rogue packets.
In accordance with one embodiment of the invention, a data segment includes a plurality of data packets arranged in a square array. For each data segment, there are two error correction code (ECC) packets per row, column, and diagonal that are used to correct either one or two missing packets in any data row, column, or diagonal. The ECC packets contain Reed-Solomon two redundancy data. Each data segment has a corresponding packet status table (PST) that contains an entry for each data and ECC packet. Each PST entry indicates whether its corresponding packet has been received and as valid. In addition, the PST contains a count of the number of good packets present in each row, column, and diagonal, and a total number of good data packets in the segment. These counts are used by a segment correction processor (SCP) to determine when correction can be applied to the segment. The SCP is responsible for all segment correction activities.
Using a Reed-Solomon correction code with two redundant code words provides the ability to locate a single error and correct it, or to correct two errors if the locations are known. To correct two errors, the known locations must be erased or reset to zero so that they do not contribute an error term to the syndrome calculations.
During normal operation, the SCP uses only erasure correction for correcting either single- or two-packet errors. Under error recovery conditions, after a segment CRC test has failed, the SCP determines the location of a rogue packet using the first form of error location and correction. The SCP calculates the syndromes for each row. The resulting syndromes will both be zero if the row has only good packets. If the row has one or more rogue packets, the syndromes are non-zero. The SCP then uses both syndrome terms to calculate the location of a potential rogue packet. If there is only one rogue packet, the corresponding PST entry is marked as not received, and its corresponding row, column, and diagram count, along with the total good packet count are each decremented, and the SCP is restarted for normal correction. The SCP will then correct the missing packet and repeat the segment CRC test. Assuming that it passes the segment CRC test, the segment is released to the host for reading and the read process continues.
The rogue packet detection portion of the SCP searches each row including the row ECC and column ECC. The SCP can determine a possible column location in each row that one or more rogue packets are located in. A simple range check of the rogue packet column location can give some credence to the result. Namely, if it exceeds the number of columns in the PST, there is probably more than one rogue packet in the row.
After a rogue packet is found, rogue packet detection is resumed until the last row is processed. Each time a rogue packet is located, the SCP sets a xe2x80x9crogue foundxe2x80x9d bit. Each time a rogue packet is located, or the last row has been processed, the SCP sets a xe2x80x9cdonexe2x80x9d bit.